Maven Multi-module Projects হল এমন প্রোজেক্ট যেখানে একাধিক মডিউল বা সাব-প্রোজেক্ট থাকে, যেগুলি একে অপরের সাথে যুক্ত থাকে। Maven ব্যবহার করে আপনি এই ধরনের প্রোজেক্ট খুব সহজে পরিচালনা করতে পারেন, যেখানে প্রতিটি মডিউল একটি স্বাধীন ইউনিট হিসেবে কাজ করে, তবে সব মডিউল একটি মূল প্যারেন্ট প্রোজেক্টের অধীনে থাকে।
ম্যাভেন মডিউলগুলিকে একসাথে বিল্ড করতে সাহায্য করে এবং প্রতিটি মডিউলের জন্য আলাদা আলাদা ডিপেনডেন্সি এবং কনফিগারেশন পরিচালনা করা সহজ করে তোলে। এই ধরনের প্রোজেক্ট সাধারণত বড় অ্যাপ্লিকেশন বা ফ্রেমওয়ার্ক তৈরি করার জন্য ব্যবহৃত হয় যেখানে বিভিন্ন মডিউল একে অপরের সাথে কাজ করে।
১. Maven Multi-module প্রোজেক্টের কাঠামো
একটি multi-module project এর সাধারণ কাঠামো হবে এরকম:
my-multi-module-project/
│
├── pom.xml (Parent POM)
│
├── module-1/
│ └── pom.xml (Module 1 POM)
│
├── module-2/
│ └── pom.xml (Module 2 POM)
│
└── module-3/
└── pom.xml (Module 3 POM)
এখানে, মূল parent POM ফাইলটি সমস্ত সাব-প্রোজেক্টের বা মডিউলের জন্য একটি কনফিগারেশন হিসেবে কাজ করে। প্রতিটি মডিউলের নিজস্ব pom.xml ফাইল থাকে, যা সেই মডিউলের নির্দিষ্ট কনফিগারেশন এবং ডিপেনডেন্সি ধারণ করে।
২. Maven Multi-module প্রোজেক্ট তৈরি করা
২.১ Parent POM Configuration
প্রথমে একটি মূল parent POM তৈরি করুন, যেটি সমস্ত মডিউলগুলিকে পরিচালনা করবে। এই POM ফাইলটি সব মডিউলের জন্য সাধারণ কনফিগারেশন, প্লাগইন এবং ডিপেনডেন্সি সরবরাহ করবে।
pom.xml (Parent POM):
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-multi-module-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging> <!-- Parent pom, no packaging needed -->
<modules>
<module>module-1</module>
<module>module-2</module>
<module>module-3</module>
</modules>
<dependencies>
<!-- Common dependencies across modules -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.9</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<!-- Common plugins for all modules -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
এখানে, modules ট্যাগের মধ্যে সমস্ত মডিউলগুলির নাম উল্লেখ করা হয়েছে এবং এই প্যারেন্ট POM ফাইলটি সমস্ত মডিউলের জন্য ডিপেনডেন্সি এবং প্লাগইন কনফিগারেশন সরবরাহ করবে।
২.২ Module POM Configuration
প্রতিটি মডিউলের নিজস্ব pom.xml ফাইল থাকতে হবে, যা ঐ মডিউল-specific কনফিগারেশন ধারণ করবে। এই ফাইলটি প্যারেন্ট POM থেকে প্রয়োজনীয় কনফিগারেশন ও ডিপেনডেন্সি উত্তরাধিকারসূত্রে পাবে।
module-1/pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>my-multi-module-project</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <!-- Relative path to the parent POM -->
</parent>
<artifactId>module-1</artifactId>
<dependencies>
<!-- Module-specific dependencies -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
</dependencies>
</project>
এখানে, parent ট্যাগের মাধ্যমে প্যারেন্ট POM এর সাথে সম্পর্ক স্থাপন করা হয়েছে এবং এই মডিউলটির জন্য অতিরিক্ত ডিপেনডেন্সি যোগ করা হয়েছে।
module-2/pom.xml এবং module-3/pom.xml ফাইলগুলি প্রায় একই রকম হবে, শুধু তাদের আলাদা artifactId থাকবে।
৩. মডিউলগুলো বিল্ড করা
একবার আপনি সমস্ত মডিউল কনফিগার করে ফেললে, আপনি মূল প্যারেন্ট প্রোজেক্ট ডিরেক্টরির মধ্যে থেকে বিল্ড প্রক্রিয়া শুরু করতে পারবেন। Maven সমস্ত মডিউল গুলি বিল্ড করতে সক্ষম হবে।
mvn clean install
এই কমান্ডটি সমস্ত মডিউলগুলি বিল্ড করবে এবং আপনার local repository তে ইনস্টল করবে। Maven প্রতিটি মডিউলটির pom.xml ফাইল অনুযায়ী ডিপেনডেন্সি ম্যানেজমেন্ট এবং বিল্ডিং প্রক্রিয়া সম্পাদন করবে।
৪. Parent POM এ Plugins এবং Profile Management
Maven multi-module প্রোজেক্টে, আপনি প্যারেন্ট POM ব্যবহার করে সমস্ত মডিউলের জন্য plugins এবং profiles কনফিগার করতে পারেন, যা কোড বিল্ড এবং টেস্ট প্রক্রিয়া সুনির্দিষ্ট করবে।
Example: Parent POM with Plugin Configuration
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
এখানে, Maven Surefire Plugin কনফিগার করা হয়েছে, যা সমস্ত মডিউলে টেস্টিং পরিচালনা করবে।
৫. Multi-module প্রোজেক্টের সুবিধা
- কোড পুনঃব্যবহার: একাধিক মডিউল ব্যবহার করে, আপনি সাধারণ কোড পুনঃব্যবহার করতে পারেন। যেমন ডাটা অ্যাক্সেস লেয়ার, সার্ভিস লেয়ার ইত্যাদি আলাদা মডিউলে রাখা যায় এবং অন্যান্য মডিউলে ব্যবহার করা যায়।
- ডিপেনডেন্সি ম্যানেজমেন্ট: মডিউলগুলির মধ্যে ডিপেনডেন্সি ম্যানেজমেন্ট প্যারেন্ট POM দ্বারা একত্রিত করা যায়।
- প্লাগইন কনফিগারেশন: আপনি প্যারেন্ট POM ব্যবহার করে সমস্ত মডিউলের জন্য সাধারণ প্লাগইন কনফিগারেশন দিতে পারেন, যা বিল্ড প্রক্রিয়া সহজ করে তোলে।
- টেস্টিং এবং ডিপ্লয়মেন্ট: সব মডিউল একসাথে টেস্ট এবং ডিপ্লয় করা সহজ হয়, কারণ Maven স্বয়ংক্রিয়ভাবে প্রতিটি মডিউলের জন্য নির্ধারিত টেস্ট এবং বিল্ড প্রক্রিয়া পরিচালনা করে।
সারাংশ
Maven Multi-module Projects জাভা প্রোজেক্টের জন্য একটি শক্তিশালী কনফিগারেশন টুল। এটি মডিউলগুলিকে একত্রে একসাথে কাজ করতে সহায়তা করে এবং ডিপেনডেন্সি, বিল্ড এবং প্লাগইন কনফিগারেশনগুলি কেন্দ্রীভূতভাবে পরিচালনা করতে সক্ষম করে। এই প্রক্রিয়া ডেভেলপমেন্ট প্রক্রিয়াকে দ্রুত এবং সহজ করে তোলে, বিশেষত বড় স্কেল প্রোজেক্টগুলির জন্য।
Read more